class Anima1 {
    name: string;
    age: number;
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }
    //在此处添加的属性，会直接添加道实例对象上
    sex: string = "男"

    //在此处添加的方法会直接添加到原型对象上
    jump(str: string): void {
        console.log(str);
        console.log("跳了一下");

    }

    // 在构造函数自身上添加属性和方法
    static song(): any {
        console.log('新冠还没结束啊啊啊');
    }
    static color: string = '黄种人，中华魂'


}


let cat = new Anima1("喵喵没了", 111);
console.log(cat);

//调用原型对象上的方法
cat.jump("111")


//调用自身的方法
Anima1.song();
console.log(Anima1.color);

class Person extends Anima1 {
    constructor(name: string, age: number) {
        super(name, age)
    }
    jump(str: string): void {
        super.jump(str)
    }


}

let liming = new Person("liming", 111222)
console.log(liming);
//修饰符
//public 公开的 哪里都能看到 内部外部都能使用
//private 私有的  只能内部访问  外部和子类都不能访问
//protected  受保护   内部能访问 子类当中能访问外部访问
//readonly 只读  只能在属性声明或者构造函数里进行初始化


//参数属性
class Xiaoli {
    /*
    name: string;
    age: number;
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age
    }
    */


    //参数属性写法
    //public   private    protected   readonly
    constructor(public name: string, public age: number) {
        this.name = name;
        this.age = age;

    }

}

//存取器
class zhilong {
    name: string = "志龙大帅比";
    hoppy: string = "吃喝嫖赌样样精通";

    //get读取值
    get zl(): string {
        return this.name + this.hoppy
    }
    //当值改变 就会触发set
    set zl(value) {
        console.log(value);

    }

}
let xiaozhilong = new zhilong();
console.log(xiaozhilong.zl);
xiaozhilong.zl = "肤白貌美大长腿";


// 抽象类
//抽象类不能创建实例，它包含的都是一些抽象的方法，主要是为子类做父类用的
